<!DOCTYPE html>
<html>
<head>
	<link rel="stylesheet" href="https://csdnimg.cn/release/blog_editor_html/release1.6.0/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-sulphurpool-light.css">
	<title></title>
</head>
<body>
	<article class="baidu_pl">




<div class="article_content clearfix" id="article_content">
<link href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-833878f763.css" rel="stylesheet"/>
<link href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-833878f763.css" rel="stylesheet"/>
<div class="htmledit_views" id="content_views">
<h1 id="%23java%20%23web%20%C2%A0JSP%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%EF%BC%88%E4%B8%8A%EF%BC%89%20%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E6%A6%82%E8%BF%B0%E4%B8%8Eout%E3%80%81response%E5%AF%B9%E8%B1%A1" style="margin-left:0cm;">#java #web  JSP内置对象（上）—— 内置对象概述与out、response对象</h1>
<p style="margin-left:0cm;"> </p>
<p id="main-toc"><strong>目录</strong></p>
<p id="%23java%20%23web%20%C2%A0JSP%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%EF%BC%88%E4%B8%8A%EF%BC%89%20%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E6%A6%82%E8%BF%B0%E4%B8%8Eout%E3%80%81response%E5%AF%B9%E8%B1%A1-toc" style="margin-left:0px;"><a href="#%23java%20%23web%20%C2%A0JSP%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%EF%BC%88%E4%B8%8A%EF%BC%89%20%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E6%A6%82%E8%BF%B0%E4%B8%8Eout%E3%80%81response%E5%AF%B9%E8%B1%A1" rel="nofollow">#java #web  JSP内置对象（上） 内置对象概述与out、response对象</a></p>
<p id="1%E3%80%81Jsp%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1-toc" style="margin-left:40px;"><a href="#1%E3%80%81Jsp%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1" rel="nofollow">1、Jsp内置对象</a></p>
<p id="1.1%20%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E7%AE%80%E4%BB%8B-toc" style="margin-left:80px;"><a href="#1.1%20%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E7%AE%80%E4%BB%8B" rel="nofollow">1.1 内置对象简介</a></p>
<p id="1.2%20%E8%A1%A5%E5%85%85%E7%9F%A5%E8%AF%86-toc" style="margin-left:80px;"><a href="#1.2%20%E8%A1%A5%E5%85%85%E7%9F%A5%E8%AF%86" rel="nofollow">1.2 补充知识</a></p>
<p id="2%E3%80%81%E9%83%A8%E5%88%86%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E4%BB%8B%E7%BB%8D-toc" style="margin-left:40px;"><a href="#2%E3%80%81%E9%83%A8%E5%88%86%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E4%BB%8B%E7%BB%8D" rel="nofollow">2、部分内置对象介绍</a></p>
<p id="1.1%20out%E5%AF%B9%E8%B1%A1-toc" style="margin-left:80px;"><a href="#1.1%20out%E5%AF%B9%E8%B1%A1" rel="nofollow">1.1 out对象</a></p>
<p id="2.2%20request%E5%AF%B9%E8%B1%A1-toc" style="margin-left:80px;"><a href="#2.2%20request%E5%AF%B9%E8%B1%A1" rel="nofollow">2.2 request对象</a></p>
<hr id="hr-toc"/><h2 id="1%E3%80%81Jsp%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1" style="margin-left:0cm;">1、Jsp内置对象</h2>
<h3 id="1.1%20%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E7%AE%80%E4%BB%8B" style="margin-left:27pt;">1.1 内置对象简介</h3>
<p style="margin-left:54pt;">Jsp内置对象是Web容器所创建的以组对象，不需要使用new关键字就可以使用的内置对象。</p>
<p style="margin-left:54pt;">Jsp有9大内置对象：<strong>out、request、response、session、application、page、pageContext、exception、config</strong></p>
<p style="text-align:center;"><img alt="" class="has" height="318" src="https://img-blog.csdnimg.cn/20190115234206895.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3NTcxMA==,size_16,color_FFFFFF,t_70" width="400"/></p>
<h3 id="1.2%20%E8%A1%A5%E5%85%85%E7%9F%A5%E8%AF%86" style="margin-left:27pt;">1.2 补充知识</h3>
<p style="margin-left:54pt;">1、Web应用程序请求与响应模式</p>
<p style="margin-left:81pt;">用户发送请求（request）</p>
<p style="margin-left:81pt;">服务器给用户响应（response）</p>
<p style="margin-left:54pt;">2、缓冲区</p>
<p style="margin-left:81pt;"><strong>缓冲区：Buffer，内存一块区域用来保存临时数据。</strong></p>
<p style="margin-left:54pt;">3、get与post</p>
<p style="margin-left:81pt;">如下所示的表单标签，</p>
<pre class="has">
<code>&lt;form name="regForm" action="动作" method="提交方式"&gt;&lt;/form&gt;</code></pre>
<p style="margin-left:81pt;">提交方式有get与post。</p>
<p style="margin-left:81pt;"><strong>get：以明文方式通过URL提交数据，数据在URL中可以看到。提交的数据最多不超过2KB。安全性较低但效率比post高。适合提交数据量不大，安全性不高的数据。比如：搜索、查询等功能。</strong></p>
<p style="margin-left:81pt;"><strong>post：将用户提交的信息封装在HTML HEADER内。适合提交数据量大，安全性高的用户信息，比如：注册、修改、上传等功能。</strong></p>
<p style="margin-left:81pt;">例如：</p>
<p style="margin-left:108pt;">(1)、新建一个jsp页面，命名为login.jsp，内容如下：</p>
<pre class="has">
<code>&lt;%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
    &lt;title&gt;login&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;login&lt;/h1&gt;
    &lt;form name="regForm" action="doLogin.jsp" method="get"&gt;
        user:&lt;input type="text" name="user"&gt;&lt;br /&gt;
        password:&lt;input type="password" name="password"&gt;&lt;br /&gt;
        &lt;input type="submit"&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p style="margin-left:108pt;">(2)、新建一个jsp页面，名为doLogin.jsp，内容如下：</p>
<pre class="has">
<code>&lt;%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
    &lt;title&gt;Welcome&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Welcome&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p style="margin-left:108pt;">(3)、运行login.jsp，显示如下：</p>
<p style="text-align:center;"><img alt="" class="has" height="218" src="https://img-blog.csdnimg.cn/20190115234241701.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3NTcxMA==,size_16,color_FFFFFF,t_70" width="400"/></p>
<p style="margin-left:108pt;">(4)、随便输入user和password，点击确定，跳转到了doLogin.jsp页面，可以看到地址栏里面的链接后面有我们之前输入的用户名和密码：</p>
<p style="text-align:center;"><img alt="" class="has" height="77" src="https://img-blog.csdnimg.cn/20190115234257656.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3NTcxMA==,size_16,color_FFFFFF,t_70" width="400"/></p>
<p style="margin-left:108pt;">(5)、将login.jsp文件中Form标签个method属性从get改成post，重复上述步骤，可以发现地址栏里面没有了我们输入的账号密码：</p>
<p style="text-align:center;"><img alt="" class="has" height="125" src="https://img-blog.csdnimg.cn/20190115234313821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3NTcxMA==,size_16,color_FFFFFF,t_70" width="400"/></p>
<p style="text-indent:0;"> </p>
<h2 id="2%E3%80%81%E9%83%A8%E5%88%86%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1%E4%BB%8B%E7%BB%8D">2、部分内置对象介绍</h2>
<h3 id="1.1%20out%E5%AF%B9%E8%B1%A1" style="margin-left:27pt;">1.1 out对象</h3>
<p style="margin-left:54pt;">out对象是JspWriter类的实例，是向客户端输出内容常用的对象。</p>
<p style="margin-left:54pt;">常用方法如下：</p>
<pre class="has">
<code>void println() //向客户端打印字符串

void clear() //清除缓冲区的内容，如果flush之后调用会在控制台抛出异常

void clearBuffer() //清除缓冲区的内容，如果在flush之后不会抛出异常

void flush() //将缓冲区的内容输出到客户端

int getBufferSize() //返回缓冲区字节大小，如果不设缓冲区则为0

int getRemaining() //返回缓冲区还剩余的空间

boolean isAutoFlush() //返回缓冲区满时，时自动清空还是抛出异常

void close() //关闭输出流</code></pre>
<p style="margin-left:81pt;">例如：</p>
<pre class="has">
<code>&lt;body&gt;

&lt;%

    out.println("&lt;h1&gt;你好&lt;/h1&gt;");

    //out.clear();  //假如这里使用了clear会怎么样？这个方法放在flush()后会怎么样？

    out.flush();  //假如这个被注释了会怎样？

    out.println("&lt;h2&gt;你好&lt;/h2&gt;");

%&gt;

    缓冲区大小：&lt;%=out.getBufferSize()%&gt;&lt;br /&gt;

    缓冲区剩余大小：&lt;%=out.getRemaining()%&gt;&lt;br /&gt;

    是否自动清空缓冲区：&lt;%=out.isAutoFlush()%&gt;

&lt;/body&gt;</code></pre>
<h3 id="2.2%20request%E5%AF%B9%E8%B1%A1" style="margin-left:27pt;">2.2 request对象</h3>
<p style="margin-left:54pt;">客户端的请求信息被封装在request对象中，通过它才能了解到客户端的需求，然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域，即完成客户端的请求之前一直有效。</p>
<p style="margin-left:54pt;">常用方法如下：</p>
<pre class="has">
<code>String getParameter(String name) //返回name指定参数的参数值

String[]getParameterValues(String name) //返回包含参数name的所有值的数组

void setAttribute(String,Object) //存储此请求中的属性

Object getAttribute(String name) //返回指定属性的属性值

String getContentType() //得到请求体的MIME类型

String getProtocol() //得到请求用的协议类型及版本号

String getServerName() //返回接受请求的服务器主机名

int getServerPort() //返回服务器接受此请求所用的端口号

String getCharacterEncoding() //返回字符编码方式

void setCharacterEncoding() //设置请求的字符编码方式

int getContentLength() //返回请求体的长度（单位：字节）

String getRemoteAddr() //返回发送此请求的客户端IP地址

String getRealPath(String path) //返回一虚拟路径的真实路径

String getContextPath() //返回上下文路径</code></pre>
<p style="margin-left:54pt;">例如：</p>
<p style="margin-left:81pt;">(1)、新建一个jsp文件，命名为register，内容如下：</p>
<pre class="has">
<code>&lt;%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset="utf-8"&gt;
    &lt;title&gt;register&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;register&lt;/h1&gt;
    &lt;form name="regForm" action="request.jsp" method="post"&gt;
        &lt;table&gt;
            &lt;tr&gt;
                &lt;td&gt;user:&lt;/td&gt;
                &lt;td&gt;&lt;input type="text" name="username"&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;hobby:&lt;/td&gt;
                &lt;td&gt;
                    &lt;input type="checkbox" name="favorite" value="read"&gt;读书
                    &lt;input type="checkbox" name="favorite" value="music"&gt;音乐
                    &lt;input type="checkbox" name="favorite" value="movie"&gt;电影
                    &lt;input type="checkbox" name="favorite" value="internet"&gt;上网
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td colspam="2"&gt;&lt;input type="submit" value="submit"&gt;&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/table&gt;
&lt;/form&gt;
&lt;a href="request.jsp？username=list"&gt;测试URL传参数&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p style="margin-left:81pt;">(2)、新建一个jsp文件，命名为request，内容如下：</p>
<pre class="has">
<code>&lt;%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset="utf-8"&gt;
    &lt;title&gt;register&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Register successful!&lt;/h1&gt;
&lt;%
    request.setCharacterEncoding("utf-8");//设置获取参数的编码，防止乱码
    request.setAttribute("password", "123");
%&gt;
&lt;%--这里函数里的字符串参数和之前用户名的input的name一样 --%&gt;
    用户名：&lt;%=request.getParameter("username")%&gt;&lt;br /&gt;
    爱好：
&lt;%
    if (request.getParameterValues("favorite") != null) {
    //这里函数里的字符串参数和之前用户名的checkbox的name一样
    String[] favorite = request.getParameterValues("favorite");
        for (int i = 0; i &lt; favorite.length; i++) {
            out.println(favorite[i] + "&amp;nbsp;&amp;nbsp;");
        }
    }
%&gt;&lt;br /&gt;
密码：
&lt;%
    //这里的密码是上面setAttribute存入的密码
    out.println(request.getAttribute("password"));
%&gt;&lt;br /&gt;
    请求的MIME类型：&lt;%=request.getContentType() %&gt;&lt;br /&gt;
    协议类型与版本号：&lt;%=request.getProtocol() %&gt;&lt;br /&gt;
    服务器主机名：&lt;%=request.getServerName() %&gt;&lt;br /&gt; 
    服务器端口：&lt;%=request.getServerPort() %&gt;&lt;br /&gt;
    请求文件的长度：&lt;%=request.getContentLength() %&gt;&lt;br /&gt;
    请求客户端的ip地址：&lt;%=request.getRemoteAddr() %&gt;&lt;br /&gt;
    请求的真实路径：&lt;%=request.getRealPath("request.jsp") %&gt;&lt;br /&gt;
    请求的上下文路径：&lt;%=request.getContextPath() %&gt;&lt;br /&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p style="margin-left:81pt;">(3)、运行register.jsp，显示如下：</p>
<p style="text-align:center;"><img alt="" class="has" height="236" src="https://img-blog.csdnimg.cn/20190115235623609.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3NTcxMA==,size_16,color_FFFFFF,t_70" width="400"/></p>
<p style="margin-left:81pt;">(4)、随意填写user和hobby，点击submit，可以发现，跳转到了request.jsp页面，而且页面获取到了曾经输入的user和hobby：</p>
<p style="text-align:center;"><img alt="" class="has" height="261" src="https://img-blog.csdnimg.cn/20190115235638491.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3NTcxMA==,size_16,color_FFFFFF,t_70" width="600"/></p>
<p style="margin-left:81pt;">(5)、返回register页面，点击测试URL传参数，可以发现，在a标签里的"?"后面的参数也成功的传递到了request.jsp：</p>
<p style="text-align:center;"><img alt="" class="has" height="250" src="https://img-blog.csdnimg.cn/20190115235659730.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3NTcxMA==,size_16,color_FFFFFF,t_70" width="600"/></p>
<p style="margin-left:81pt;">注：如果url传中文参数有乱码，则需要用记事本或者编辑器打开tomcat目录下的conf目录下的server.xml文件，在如图所示位置添加Encoding="utf-8"后重启tomcat：</p>
<p style="text-align:center;"><img alt="" class="has" height="124" src="https://img-blog.csdnimg.cn/20190115235722727.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3NTcxMA==,size_16,color_FFFFFF,t_70" width="400"/></p>
<p style="text-indent:0;"> </p>
<p style="text-indent:0;"><strong>        关于java web的更多内容，可以到</strong><a href="https://blog.csdn.net/weixin_41475710/column/info/32531">https://blog.csdn.net/weixin_41475710/column/info/32531</a><strong>查看，会持续更新。</strong> </p>
<p> </p> </div>


</div>
</article>


</body>
</html>